#ifndef CONNECTION_POOL_H
#define CONNECTION_POOL_H

#include <Poco/Data/SessionPool.h>
#include <string>
#include <memory>
#include <atomic>

namespace servercom {

/**
 * @brief 高级连接池管理
 */
class ConnectionPool {
public:
    /**
     * @brief 创建连接池实例
     * @param db_type 数据库类型
     * @param connection_string 连接字符串
     * @param initial_size 初始连接数
     * @param max_size 最大连接数
     */
    static std::shared_ptr<ConnectionPool> create(const std::string& db_type,
                                                const std::string& connection_string,
                                                int initial_size = 2,
                                                int max_size = 10);

    /**
     * @brief 获取连接
     * @param timeout_ms 超时时间(毫秒)
     * @return Poco::Data::Session 数据库会话
     */
    Poco::Data::Session getConnection(int timeout_ms = 5000);

    /**
     * @brief 获取当前活跃连接数
     */
    int activeConnections() const;

    /**
     * @brief 获取当前空闲连接数
     */
    int idleConnections() const;

    /**
     * @brief 调整连接池大小
     * @param new_size 新的连接池大小
     */
    void resize(int new_size);

private:
    ConnectionPool(const std::string& db_type,
                  const std::string& connection_string,
                  int initial_size,
                  int max_size);

    std::unique_ptr<Poco::Data::SessionPool> pool_;
    std::atomic<int> active_count_;
};

} // namespace servercom

#endif // CONNECTION_POOL_H